package com.zwz.control;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zwz.bean.AdminLoginInfo;
import com.zwz.control.util.R;
import com.zwz.service.AdminLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/admin")
public class AdminLoginController {

    @Autowired
    private AdminLoginService adminLoginService;

    /**
     * 管理员注册
     *  由系统管理员进行，注册成功后会在管理员个人信息表中插入账号的id.
     * @param adminLoginInfo 管理员账号密码
     * @return R
     */
    @PostMapping(value = "/regist")
    public R register(@RequestBody AdminLoginInfo adminLoginInfo) {
        AdminLoginInfo adminLoginInfo1 = adminLoginService.register(adminLoginInfo);
        if (adminLoginInfo1 == null) {
            return new R(false, "用户名已存在！");
        } else {
            return new R(true, adminLoginInfo1, "注册成功！");
        }
    }

    /**
     * 登录
     *  管理员登录
     * @param adminLoginInfo 管理员账号密码信息
     * @return Result
     */

    @PostMapping("/login")
    public R login(@RequestBody AdminLoginInfo adminLoginInfo) {
        Integer userId = adminLoginService.login(adminLoginInfo);
        if (userId == null) {
            return new R(false, "用户名或密码错误");
        } else {
            adminLoginInfo.setId(userId);
            return new R(true, adminLoginInfo, "登录成功");
        }
    }


    /**
     * 管理员账号信息分页查询，由系统管理员进行
     * @param currentPage 当前页码
     * @param pageSize 每页数据行数
     * @param adminLoginInfo 管理员账号信息，用于查询，可以为空
     * @return
     */
    @GetMapping("/page/{currentPage}/{pageSize}")
    public R getAll(@PathVariable int currentPage, @PathVariable int pageSize, AdminLoginInfo adminLoginInfo) {
        IPage<AdminLoginInfo> page = adminLoginService.getPage(currentPage, pageSize, adminLoginInfo);
        // 如果当前页面值大于总页码值，那么重新执行查询操作，使用最大页码值作为当前页码值
        if (currentPage > page.getPages()) {
            page = adminLoginService.getPage((int) page.getPages(), pageSize, adminLoginInfo);
        }
        return new R(true, page);
    }

    /**
     * 删除某个管理员的账号，并同步删除其在管理员信息表中的个人信息
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    public R deleteAdmin(@PathVariable Integer id) {
        boolean flag = adminLoginService.deleteById(id);
        return new R(flag, flag ? "删除成功^_^" : "删除失败-_-!");
    }
}

